import request from './request'


/**
 * 获取用户的收货地址列表
 * @returns {Promise} 返回一个Promise对象，请求成功时会包含地址列表数据
 * 调用示例：
 * listUserAddress().then(res => {
 *   console.log('用户地址列表', res)
 * }).catch(err => {
 *   console.error('获取地址失败', err)
 * })
 */
export const listUserAddress = () => {
  // 发送GET请求到地址列表接口
  return request.get("/delivery/address")
}

/**
 * 添加新的收货地址
 * @param {Object} obj - 包含收货地址信息的对象
 * @param {string} obj.receiverName - 收件人姓名
 * @param {string} obj.receiverPhone - 收件人电话
 * @param {string} obj.province - 省份
 * @param {string} obj.city - 城市
 * @param {string} obj.district - 区/县
 * @param {string} obj.detailAddress - 详细地址（街道、门牌号等）
 * @param {boolean} obj.isDefault - 是否设为默认地址
 * @returns {Promise} 返回一个Promise对象，请求成功时包含新增地址的信息
 * 调用示例：
 * addDeliveryAddress({
 *   receiverName: '张三',
 *   receiverPhone: '13800138000',
 *   province: '广东省',
 *   city: '深圳市',
 *   district: '南山区',
 *   detailAddress: '科技园路100号',
 *   isDefault: true
 * }).then(res => {
 *   console.log('地址添加成功', res)
 * })
 */
export const addDeliveryAddress = (obj) => {
  // 发送POST请求到新增地址接口，并传递地址信息参数
  return request.post('/delivery/address', {
    receiverName: obj.receiverName,
    receiverPhone: obj.receiverPhone,
    province: obj.province,
    city: obj.city,
    district: obj.district,
    detailAddress: obj.detailAddress,
    isDefault: obj.isDefault
  })
}

/**
 * 获取收货地址的数量
 *
 * 该函数通过HTTP GET请求调用后端接口，获取用户的收货地址总数
 *
 * @returns {Promise} 返回一个Promise对象，解析后为接口返回的地址数量数据
 *                    成功时包含地址数量信息，失败时可能包含错误信息
 */
export const getDeliveryAddressCount = () => {
  // 发送GET请求到指定接口，获取收货地址数量
  return request.get("/delivery/address/count")
}

/**
 * 设置默认收货地址
 *
 * 该函数通过HTTP PATCH请求调用后端接口，将指定ID的收货地址设为默认地址
 * 采用PATCH方法符合RESTful设计中"部分更新资源"的语义（仅修改地址的默认状态）
 *
 * @param {string|number} id - 要设置为默认地址的ID
 * @returns {Promise} 返回一个Promise对象
 *                    成功时包含更新后的地址信息或操作结果
 *                    失败时可能包含错误状态码及错误信息
 */
export const setDefaultAddress = (id) => {
  // 发送PATCH请求到指定地址接口，修改地址的默认状态
  return request.patch(`/delivery/address/${id}`)
}


/**
 * 根据ID删除收货地址
 *
 * 该函数通过HTTP DELETE请求调用后端接口，删除指定ID的收货地址
 * 采用DELETE方法符合RESTful设计中"删除资源"的语义规范
 *
 * @param {string|number} id - 要删除的收货地址ID
 * @returns {Promise} 返回一个Promise对象
 *                    成功时包含删除操作的结果信息
 *                    失败时可能包含错误状态码及错误信息（如地址不存在、无权限等）
 */
export const deleteDeliveryAddressById = (id) => {
  // 发送DELETE请求到指定地址接口，删除对应ID的收货地址
  return request.delete(`/delivery/address/${id}`)
}

/**
 * 修改收货地址信息
 * @param {Object} obj - 包含收货地址信息的对象
 * @param {string} obj.receiverName - 收件人姓名
 * @param {string} obj.receiverPhone - 收件人电话号码
 * @param {string} obj.province - 省份信息
 * @param {string} obj.city - 城市信息
 * @param {string} obj.district - 区/县信息
 * @param {string} obj.detailAddress - 详细地址（街道、门牌号等）
 * @param {boolean} obj.isDefault - 是否设为默认地址（true为默认，false为非默认）
 * @returns {Promise} - 返回一个Promise对象，包含接口请求的结果
 */
export const modifyDeliveryAddress = (id, obj) => {
  // 发起PUT请求修改收货地址，将地址信息作为请求体发送到指定接口
  return request.put(`/delivery/address/${id}`, {
    receiverName: obj.receiverName, // 收件人姓名
    receiverPhone: obj.receiverPhone, // 收件人电话
    province: obj.province, // 省份
    city: obj.city, // 城市
    district: obj.district, // 区/县
    detailAddress: obj.detailAddress, // 详细地址
    isDefault: obj.isDefault // 是否默认地址
  })
}
/**
 * 查询默认收货地址
 * @returns {Promise} 返回一个Promise对象，用于处理请求的成功或失败结果
 * 成功时会包含服务器返回的默认收货地址信息（如收件人、电话、地址等）
 * 失败时会包含错误信息（如无默认地址时的提示等）
 */
export const queryDefaultDeliveryAddress = () => {
  // 发送GET请求到"/delivery/address/default"接口，查询用户的默认收货地址
  return request.get("/delivery/address/default")
}

/**
 * 根据地址ID查询收货地址详情
 * 
 * 该函数用于向后端发送请求，根据指定的收货地址ID获取对应的地址详细信息，
 * 适用于编辑地址、查看地址详情等需要单个地址完整信息的场景
 * 
 * @param {number|string} id - 收货地址的唯一标识ID，用于精准查询特定地址
 * @returns {Promise} 返回一个Promise对象，resolve时为后端返回的地址详情数据，
 *                    数据结构通常包含id、收货人姓名、电话、省市区、详细地址等信息
 * 
 * @example
 * // 调用示例
 * queryDeliveryAddressById(123)
 *   .then(address => {
 *     console.log('地址详情：', address);
 *     // 处理地址数据（如回显到编辑表单）
 *   })
 *   .catch(error => {
 *     console.error('查询地址失败：', error);
 *   });
 */
export const queryDeliveryAddressById = (id) => {
  return request.get(`/delivery/address/${id}`);
};

export const queryChinaCities = () => {
  return request.get("/delivery/address/china/cities")
}